package com.utils {
import fairygui.GObject;

import laya.maths.Point;

public class Cast {

	/** 星期 */
	public static var weekday:Array = ["星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];

	public static var timer:int;

	public static const RAD_TO_DEG:Number = 180/Math.PI;
	public static const DEG_TO_RAD:Number = Math.PI/180;

	public function Cast() {
	}

	/**
	 * 格式化时间
	 * @param date 时间
	 * @param fmt 格式
	 * yyyy：年<br/>
	 * MM：月<br/>
	 * dd：日<br/>
	 * hh：1~12小时制(1-12)<br/>
	 * HH：24小时制(0-23)<br/>
	 * mm：分<br/>
	 * ss：秒<br/>
	 * S：毫秒<br/>
	 * E：星期几
	 * @return
	 */
	public static function formatDate(date:*, fmt:String):String {
		if (!(date is Date)) {
			var date2:Date = new Date();
			date2.setTime(date);
			date = date2;
		}
		// 时区
//		var localOffset:Number = date.getTimezoneOffset() * 60000;
//		console.log(localOffset)
		var tempStr:String = "";
		if(/(y+)/.test(fmt)){
			__JS__("tempStr = RegExp.$1;");
			fmt = fmt.replace(tempStr, (date.getFullYear()+'').substr(4 - tempStr.length));
		}
		var o:Object = {
			'M+':date.getMonth() + 1,
			'd+':date.getDate(),
			'h+':(date.getHours()%12),
			'H+':date.getHours(),
			'm+':date.getMinutes(),
			's+':date.getSeconds(),
			'S+':date.getMilliseconds(),
			"E+":weekday[date.getDay()]
		};
//		console.log(o)
		// 遍历这个对象
		for (var k:String in o){
			if(new RegExp("(" + k + ")").test(fmt)){
//				 console.log('${k}')
				__JS__("tempStr = RegExp.$1;");
				fmt = fmt.replace(tempStr, tempStr.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
			}
		}
		return fmt;
	}

	/**
	 * 计算两点之间的角度角度
	 * @param x1 原始坐标X
	 * @param y1 原始坐标Y
	 * @param x2 新坐标X
	 * @param y2 新坐标Y
	 * @return 旋转度数
	 *
	 */
	public static function angle(x1:Number, y1:Number, x2:Number, y2:Number):Number {
		var newX:Number = x2 - x1;
		var newY:Number = y2 - y1;
		var a:Number = Math.atan2(newY, newX);
		return a * 180 / Math.PI;
	}

	/**
	 * 计算两点之间的距离
	 * @param x1 原始坐标X
	 * @param y1 原始坐标Y
	 * @param x2 新坐标X
	 * @param y2 新坐标Y
	 * @return
	 *
	 */
	public static function pointDistance(x1:Number, y1:Number, x2:Number, y2:Number):Number {
		var x:Number = x1 - x2;
		var y:Number = y1 - y2;
		return Math.sqrt(x + y);
	}

	/**
	 * 模拟圆周运动
	 * 已知圆心o(x0, y0),半径r和弧度angle,求圆上任意一点P(x, y)的坐标
	 * @param x0
	 * @param y0
	 * @param r
	 * @param angle
	 * @return
	 * 注意:舞台的x轴正方向水平向右,y轴正方向垂直向下
	 */
	public static function roundPoint(x0:Number, y0:Number, r:Number, angle:Number):Point {
		var x:Number = x0 + (Math.cos(angle) * r);
		var y:Number = y0 + (Math.sin(angle) * r);
		return new Point(x, y);
	}

	/**
	 * 补全数字
	 * @param data 要补全的参数
	 * @param len 数字总长度
	 * @return
	 *
	 */
	public static function fillAVacancy(data:*, len:int):String {
		var string:String = data + "";
		len = len - string.length;
		if (len > 0) {
			for (var i:int = 0; i < len; i++) {
				string = "0" + string;
			}
		}
		return string;
	}

	/** 数字格式     0 （其他）千  1万 2亿 */
	public static function numberConvert(n:Number, type:int = 0):String {
		switch (type) {
			case 1:
				if (n > 100000000) return Math.floor(n / 100000000) + "亿";
				if (n >= 10000) return Math.floor(n / 10000) + "万";
				break;
			case 2:
				if (n > 100000000) return Math.floor(n / 100000000) + "亿";
				break;
			default:
				if (n > 100000000) return Math.floor(n / 100000000) + "亿";
				if (n >= 10000) return Math.floor(n / 10000) + "万";
				if (n >= 1000) return Math.floor(n / 1000) + "千";
				break;
		}
		return n + "";
	}

	/** 数字格式   千万    */
	public static function numberConverts(n:Number):String {
		if (n >= 10000) return Math.floor(n / 10000) + "万";
		if (n >= 1000) return Math.floor(n / 1000) + "千";
		return n + "";
	}

	/**
	 * 数字格式  (英文单位) 千
	 * @param n 数字
	 * @param limit 分割值
	 * @param fixed 最后保留几位小数
	 * @return
	 */
	public static function numberConvertEn(n:Number, limit:int = 100000, fixed:int = 2):String {
		if (n >= limit) return Math.floor(n / 1000) + "K";
		return n.toFixed(fixed);
	}

	/**
	 * 将100000转为100,000.00形式
	 * @param money
	 * @param fixed 是否保留小数
	 * @return
	 */
	public static function formatMoney(money:*, fixed:Boolean=false):String {
		if (money && money != null) {
			money = String(money);
			var left:String = money.split('.')[0];
			var	right:String = money.split('.')[1];
			right = right ? (right.length >= 2 ? '.' + right.substr(0, 2) : '.' + right + '0') : '.00';
			if (!fixed) right = "";
			var temp:* = left.split('').reverse().join('').match(/(\d{1,3})/g);
			return (Number(money) < 0 ? "-" : "") + temp.join(',').split('').reverse().join('') + right;
		} else if (money === 0) {   //注意===在这里的使用，如果传入的money为0,if中会将其判定为boolean类型，故而要另外做===判断
			return fixed?'0.00':"0";
		} else {
			return fixed?'0.00':"0";
		}
	}

	/**
	 * 将100,000.00转为100000形式
	 * @param money
	 * @param fixed 是否保留小数
	 * @return
	 */
	public static function formatMoney2(money:*, fixed:Boolean=false):Number {
		if (money && money != null) {
			money = String(money);
			var group:Array = money.split('.');
			var left:String = group[0].split(',').join('');
			return fixed?Number(left + "." + group[1]):Number(left);
		} else {
			return 0;
		}
	}

	/**
	 * 打乱数组
	 * @param array 要被打乱的数组
	 *
	 */
	public static function shuffle(array:*):void {
		var rnd:int;
		var tmp:*;
		var len:int = array.length;
		for (var i:uint = 0; i < len; i++) {
			tmp = array[i];
			rnd = parseInt(Math.random() * len + "");
			array[i] = array[rnd];
			array[rnd] = tmp;
		}
	}

	/** 加密 */
	public static function encrypt(word):String {
		var key:* = __JS__("CryptoJS.enc.Utf8.parse('abcdefgabcdefg12');");
		var srcs:* = __JS__("CryptoJS.enc.Utf8.parse(word);");
		var encrypted:* = __JS__("CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7});");
		return encrypted.toString();
	}

	/** 解密 */
	public static function decrypt(word):String {
		var key:* = __JS__("CryptoJS.enc.Utf8.parse('abcdefgabcdefg12');");
		var decrypt:* = __JS__("CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});");
		return __JS__("CryptoJS.enc.Utf8.stringify(decrypt).toString();");
	}

	/**
	 * 判断是否是同一天
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static function isSameDay(date1:Number, date2:Number):Boolean {
		var _date1:Date = new Date(date1);
		var _date2:Date = new Date(date2);
		return (_date1.getFullYear() == _date2.getFullYear() &&
				_date1.getMonth() == _date2.getMonth() &&
				_date1.getDate() == _date2.getDate()
		);
	}

	/**
	 * 文字长度省略
	 * @param value 文字内容
	 * @param len 最大长度
	 */
	public static function stringOmit(value:String, len:int):String {
		var str:String = value;
		if (str && str.length > len) {
			str = str.substring(0, len);
			str += "...";
		}
		return str;
	}

	/**
	 * 高度适配
	 * @param obj 适配对象
	 */
	public static function heightAdaptation(obj:GObject):void {
		var scale:Number = obj.width/obj.initWidth;
		obj.height = obj.initHeight*scale;
		// 如果有字体

//		if (obj in GTextField) {
//			var text:GTextField = obj as GTextField;
//			scale = text.fontSize
//
//		}

	}


}

}






